//package com.source.code.variable;
//
//import com.github.javaparser.ast.CompilationUnit;
//import com.github.javaparser.ast.Node;
//import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
//import com.github.javaparser.ast.body.Parameter;
//import com.github.javaparser.ast.body.VariableDeclarator;
//import com.github.javaparser.ast.expr.Expression;
//import com.github.javaparser.ast.expr.VariableDeclarationExpr;
//import com.github.javaparser.ast.stmt.CatchClause;
//import com.github.javaparser.ast.stmt.ForStmt;
//import com.github.javaparser.ast.stmt.TryStmt;
//
//import java.util.List;
//
///**
// * 变量类型 util
// *
// * @author wangchangjie
// * @date 2024/02/01
// */
//public class VariableTypeUtil {
//
//    /**
//     * 根据变量名字查找变量类型
//     *
//     * @param variableName    变量名称
//     * @param compilationUnit 编译单元
//     * @return {@link String}
//     */
//    public static String findVariableType(String variableName, CompilationUnit compilationUnit, ClassOrInterfaceDeclaration classDeclaration) {
//        ImportResolver importResolver = new ImportResolver();
//        importResolver.visit(compilationUnit, null);
//        // 检查方法参数
//        for (Node node : compilationUnit.findAll(Parameter.class)) {
//            Parameter parameter = (Parameter) node;
//            if (parameter.getNameAsString().equals(variableName)) {
//                return importResolver.resolveFullyQualifiedClassName(parameter.getType().asString());
//            }
//        }
//        // 检查局部变量和成员变量
//        VariableTypeFinder localVariableFinder = new VariableTypeFinder(variableName,
//                importResolver);
//        localVariableFinder.findVariableType(compilationUnit);
//        String localVariableType = localVariableFinder.getVariableType();
//
//        if (localVariableType != null) {
//            return localVariableType;
//        }
//        // 检查 try-with-resources
//        List<TryStmt> tryStmts = compilationUnit.findAll(TryStmt.class);
//        for (TryStmt tryStmt : tryStmts) {
//            for (Expression expression : tryStmt.getResources()) {
//                VariableDeclarationExpr resource = (VariableDeclarationExpr) expression;
//                for (VariableDeclarator variable : resource.getVariables()) {
//                    if (variable.getNameAsString().equals(variableName)) {
//                        return importResolver.resolveFullyQualifiedClassName(variable.getType().asString());
//                    }
//                }
//            }
//        }
//        // 检查 catch 块
//        List<CatchClause> catchClauses = compilationUnit.findAll(CatchClause.class);
//        for (CatchClause catchClause : catchClauses) {
//            Parameter exceptionParameter = catchClause.getParameter();
//            if (exceptionParameter.getNameAsString().equals(variableName)) {
//                return importResolver.resolveFullyQualifiedClassName(exceptionParameter.getType().asString());
//            }
//        }
//        // 检查 for 循环
//        List<ForStmt> forStmts = compilationUnit.findAll(ForStmt.class);
//        for (ForStmt forStmt : forStmts) {
//            for (Expression expression : forStmt.getInitialization()) {
//                VariableDeclarationExpr initializer = (VariableDeclarationExpr) expression;
//                for (VariableDeclarator variable : initializer.getVariables()) {
//                    if (variable.getNameAsString().equals(variableName)) {
//                        return importResolver.resolveFullyQualifiedClassName(variable.getType().asString());
//                    }
//                }
//            }
//        }
//
//        // 如果未找到可能是静态类名 java.lang包下
//        if (Character.isUpperCase(variableName.charAt(0))) {
//            // 先判断是否是java自带的类名
//            try {
//                Class<?> clazz = VariableTypeUtil.getClass(variableName);
//                return clazz.getCanonicalName();
//            } catch (ClassNotFoundException e) {
//                // 判断自定义的类
//                ImportCollector importCollector = new ImportCollector();
//                importCollector.visit(compilationUnit, null);
//                // 找包
//                for (String importStmt : importCollector.getImports()) {
//                    if (importStmt.endsWith("." + variableName)) {
//                        return importStmt;
//                    }
//                }
//                // 找当前类
//                if (classDeclaration.getNameAsString().equals(variableName)) {
//                    return classDeclaration.getFullyQualifiedName().get();
//                }
//                // 找自定义规则
//                if (variableName.contains(".class")){
//                    return "Class<T>";
//                }
//                // TODO:类名.属性 or 类名.方法
//                if (variableName.contains("\\.")){
//
//                }
////                LogUtil.printf("类 " + variableName + " 未找到。");
//            }
//        }
//        return null;
//    }
//
//
//    public static String findVariableType(String variableName, ClassOrInterfaceDeclaration classDeclaration) {
//        VariableTypeFinder memberVariableFinder = new VariableTypeFinder(variableName);
//        memberVariableFinder.visit(classDeclaration, null);
//        return memberVariableFinder.getVariableType();
//    }
//
//    public static Class<?> getClass(String className) throws ClassNotFoundException {
//        try {
//            // 尝试使用当前类加载器加载类
//            return Class.forName(className);
//        } catch (ClassNotFoundException e) {
//            try {
//                // 如果失败，则尝试使用 Bootstrap ClassLoader 加载类
//                return Class.forName("java.lang." + className);
//            } catch (ClassNotFoundException ex) {
//                // 如果还是失败，则可能是自定义类，你可以根据自己的需求处理这种情况
//                // 这里简单地抛出 ClassNotFoundException
//                throw ex;
//            }
//        }
//    }
//
//}
